#pragma once

#include "hdmap/HDMapExports.hpp"
#include "hdmap/HDMapCommon.hpp"

namespace Navinfo
{
	namespace Engine
	{
		/**
		 *  @brief one group lane in same road
		 */
		class HDMAP_API_PUBLIC HDMapLaneGroupInfo
		{
		public:
			HDMapLaneGroupInfo(DataSource::NDSLaneGroup &ndsLaneGroup);
			HDMapLaneGroupInfo() = default;
			virtual ~HDMapLaneGroupInfo() = default;
		
		public:
			/**
			 *  @brief Get lane ID
			 *  @return Lane ID
			 */
			const uint64_t	GetID() const { return m_nID; }

			/**
			 *  @brief Get the tile ID where the lane is located
			 *  @return Tile ID
			 */
			const uint32_t	GetTileID() const { return m_nTileID; }

			/**
			 *  @brief Get a list of all lanes in one lanegroup
			 *  @return a list of all lanes
			 */
			const std::vector<std::weak_ptr<HDMapLaneInfo>>& GetLanes() const { return m_vtLanes; }

			/**
			 *  @brief Get oppsite lanegroup of lanegroup with both direction
			 *  @return oppsite lanegroup
			 */
			const std::vector<std::weak_ptr<HDMapLaneGroupInfo>>& GetOppositeLaneGroups() const { return m_vtOppositeLaneGroups; }
		private:
			friend class HDMapImpl;
			uint64_t										m_nID;					///< 
			uint32_t										m_nTileID;				///< 
			std::vector<std::weak_ptr<HDMapLaneInfo>>		m_vtLanes;				///< 
			std::vector<std::weak_ptr<HDMapLaneGroupInfo>>	m_vtOppositeLaneGroups;	///< 
		};
	}
}
namespace Navinfo{
	namespace HDMap{
		typedef Navinfo::Engine::HDMapLaneGroupInfo LaneGroup;
	}
}